/** 
 * 阿斯蒂芬
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "com_kit2_DoorLockKit.h"
#include "AES.h"
//===============================================================================================
JNIEXPORT jstring JNICALL Java_com_kit2_DoorLockKit_hello(JNIEnv *env, jobject jobj, jstring j_str)
{
    const char *n_str = (*env)->GetStringUTFChars(env, j_str, 0); //*取值
    char c_str[strlen(n_str)];                                    //
    strcpy(c_str, n_str);                                         //拷贝
    (*env)->ReleaseStringUTFChars(env, j_str, n_str);             //*释放内存
    //== 正常业务处理 ===========
    char result[100] = "Hello ";
    strcat(result, c_str);
    printf("   C:%s\n", result);
    //==========================
    return (*env)->NewStringUTF(env, result);
}

//================================================================================================

JNIEXPORT jbyteArray JNICALL Java_com_kit2_DoorLockKit_aesEncrypt(JNIEnv *env, jobject jobj, jbyteArray j_data, jbyteArray j_key)
{
    // 获取数组指针和长度=====================
    jbyte *c_data = (*env)->GetByteArrayElements(env, j_data, 0);
    int len_data = (*env)->GetArrayLength(env, j_data);
    jbyte *c_key = (*env)->GetByteArrayElements(env, j_key, 0);
    // int len_key = (*env)->GetArrayLength(env, j_key);
    // 业务处理===============================
    char res[len_data];
    aesEncrypt(c_data, len_data, res, c_key);
    // 释放内存===============================
    (*env)->ReleaseByteArrayElements(env, j_data, c_data, 0);
    (*env)->ReleaseByteArrayElements(env, j_key, c_key, 0);
    // 返回===================================
    jbyteArray result = (*env)->NewByteArray(env, len_data);
    (*env)->SetByteArrayRegion(env, result, 0, len_data, res);
    return result;
}

JNIEXPORT jbyteArray JNICALL Java_com_kit2_DoorLockKit_aesDecrypt(JNIEnv *env, jobject jobj, jbyteArray j_data, jbyteArray j_key)
{
    // 获取数组指针和长度=====================
    jbyte *c_data = (*env)->GetByteArrayElements(env, j_data, 0);
    int len_data = (*env)->GetArrayLength(env, j_data);
    jbyte *c_key = (*env)->GetByteArrayElements(env, j_key, 0);
    // int len_key = (*env)->GetArrayLength(env, j_key);
    // 业务处理===============================
    char res[len_data];
    aesDecrypt(c_data, len_data, res, c_key);
    // 释放内存===============================
    (*env)->ReleaseByteArrayElements(env, j_data, c_data, 0);
    (*env)->ReleaseByteArrayElements(env, j_key, c_key, 0);
    // 返回===================================
    jbyteArray result = (*env)->NewByteArray(env, len_data);
    (*env)->SetByteArrayRegion(env, result, 0, len_data, res);
    return result;
}